package array

import "fmt"

// 给你两个按非递减顺序 排列的整数数组 nums1 和 nums2
// 另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
// 请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
// 注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。
// 为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。

func Merge(nums1 []int, m int, nums2 []int, n int) {
	// 方法一 我好蠢....
	// copy(nums1[m:], nums2)
	// sort.Ints(nums1)

	// 方法二

	if n == 0 {
		return
	}
	if m == 0 {
		copy(nums1, nums2)
		return
	}

	sorted := make([]int, 0, m+n)

	p1, p2 := 0, 0

	for {

		fmt.Println(p1, p2)

		if nums1[p1] <= nums2[p2] {
			sorted = append(sorted, nums1[p1])
			p1++
		} else {
			sorted = append(sorted, nums2[p2])
			p2++
		}

		if p1 >= m {
			sorted = append(sorted, nums2[p2:]...)
			break
		}

		if p2 >= n {
			sorted = append(sorted, nums1[p1:]...)
			break
		}
	}

	// copy改变切片内容，不改变切片指向
	copy(nums1, sorted)

}
